home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / launchpadbugs / subscribersbase.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-04-20  |  5.1 KB  |  131 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from lphelper import LateBindingProperty, user, change_obj
  5.  
  6. class LPSubscribers(dict):
  7.     '''
  8.     keys[0] is default category
  9.     '''
  10.     
  11.     def __init__(self, keys):
  12.         if not isinstance(keys, (list, tuple, set)):
  13.             raise AssertionError
  14.         self._LPSubscribers__keys = keys
  15.         self._LPSubscribers__default = keys[0]
  16.         self._LPSubscribers__removed = set()
  17.         self._LPSubscribers__added = set()
  18.         dict.__init__(self, (lambda .0: for i in .0:
  19. (i, set()))(self._LPSubscribers__keys))
  20.  
  21.     
  22.     def __setitem__(self, key, value):
  23.         if key not in self._LPSubscribers__keys:
  24.             raise KeyError
  25.         key not in self._LPSubscribers__keys
  26.         if key is None or key == self._LPSubscribers__default:
  27.             key = self._LPSubscribers__default
  28.         else:
  29.             raise NotImplementedError, "It is impossible to subscribe to '%s'" % key
  30.         if not key == self._LPSubscribers__default(value, set):
  31.             raise AssertionError
  32.         self._LPSubscribers__removed = self[self._LPSubscribers__default] - value
  33.         self._LPSubscribers__added = value - self[self._LPSubscribers__default]
  34.         super(LPSubscribers, self).__setitem__(key, value)
  35.  
  36.     
  37.     def __iter__(self):
  38.         for i in self.itervalues():
  39.             for k in i:
  40.                 yield k
  41.             
  42.         
  43.  
  44.     
  45.     def __repr__(self):
  46.         return '<Subscribers>'
  47.  
  48.     
  49.     def __len__(self):
  50.         return sum(map(len, self.values()))
  51.  
  52.     
  53.     def __str__(self):
  54.         return 'set([%s])' % ', '.join((lambda .0: for i in .0:
  55. repr(i))(self))
  56.  
  57.     
  58.     def add(self, lp_user, key = None):
  59.         if key is None or key == self._LPSubscribers__default:
  60.             key = self._LPSubscribers__default
  61.         else:
  62.             raise NotImplementedError, "It is impossible to subscribe to '%s'" % key
  63.         if not key == self._LPSubscribers__default(lp_user, user):
  64.             lp_user = user(lp_user)
  65.         
  66.         if lp_user not in self[key]:
  67.             if lp_user in self._LPSubscribers__removed:
  68.                 self._LPSubscribers__removed.remove(lp_user)
  69.             else:
  70.                 self._LPSubscribers__added.add(lp_user)
  71.             self._LPSubscribers__added.add(lp_user)
  72.             self[key].add(lp_user)
  73.         else:
  74.             raise ValueError, "'%s' is already subscribed to this bug" % lp_user
  75.         return lp_user not in self[key]
  76.  
  77.     
  78.     def remove(self, lp_user, key = None):
  79.         if key is None or key == self._LPSubscribers__default:
  80.             key = self._LPSubscribers__default
  81.         else:
  82.             raise NotImplementedError, "It is impossible to unsubscribe from '%s'" % key
  83.         if not key == self._LPSubscribers__default(lp_user, user):
  84.             lp_user = user(lp_user)
  85.         
  86.         if lp_user in self[key]:
  87.             if lp_user in self._LPSubscribers__added:
  88.                 self._LPSubscribers__added.remove(lp_user)
  89.             else:
  90.                 self._LPSubscribers__removed.add(lp_user)
  91.             self[key].remove(lp_user)
  92.         else:
  93.             raise ValueError, "'%s' is not directly subscribed to this bug, can not be removed" % lp_user
  94.         return lp_user in self[key]
  95.  
  96.     
  97.     def get_subscriptions(self, key):
  98.         return self[key]
  99.  
  100.     
  101.     def parse(self):
  102.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  103.  
  104.     
  105.     def changed(self):
  106.         changed = set()
  107.         for i in self._LPSubscribers__removed:
  108.             changed.add(change_obj(i, 'removed'))
  109.         
  110.         for i in self._LPSubscribers__added:
  111.             changed.add(change_obj(i, 'added'))
  112.         
  113.         return changed
  114.  
  115.     changed = property(changed)
  116.     
  117.     def commit(self):
  118.         raise NotImplementedError, 'this method must be implemented by a concrete subclass'
  119.  
  120.  
  121. if __name__ == '__main__':
  122.     s = LPSubscribers(('direct', 'indirect', 'notified'))
  123.     s.add('hallo')
  124.     s.add('boo')
  125.     s.add('boo', 'indirect')
  126.     print s
  127.     print repr(s)
  128.     print len(s)
  129.     print s.get_subscriptions('indirect')
  130.  
  131.